#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

#include<iostream>
#include<vector>

using namespace std;

//��Ŀ:
//����һ������ nums����дһ������������ 0 �ƶ��������ĩβ��ͬʱ���ַ���Ԫ�ص����˳��
//��ע�� �������ڲ���������������ԭ�ض�������в�����

//C����:
//void swap(int* x, int* y)
//{
//    int tmp = *x;
//    *x = *y;
//    *y = tmp;
//}
//
//void moveZeroes(int* nums, int numSize)
//{
//    //��ʱ!
//    //1.����������һ���м���0
//    //2.��0Ԫ��ǰ��
//    //3.ĩβ��0
//    // int count=0;
//    // for(int i=0;i<numSize;i++)
//    // {
//    //     while(nums[i]==0)
//    //     {
//    //         count++;
//    //         for(int j=i;j<numSize-1;j++)
//    //         {
//    //             nums[j]=nums[j+1];
//    //         }
//    //     }
//    // }
//    // while(count)
//    // {
//    //     nums[numSize-count]=0;
//    //     count--;
//    // }
//
//    int left = -1, right = 0;
//    while (right < numSize)
//    {
//        if (nums[right] == 0)
//            right++;
//        //����ʱ��nums[right]!=0    ��nums[right]ǰ���Ԫ�ؿ϶�������0
//        else
//        {
//            left++;
//            //��ʱ,nums[left]=0   nums[right]!=0
//            swap(&nums[left], &nums[right]);
//            right++;
//        }
//    }
//}
//
//int main()
//{
//	return 0;
//}

//C++:
class Solution
{
public:
	void moveZeroes(vector<int>& nums)
	{
		for (int cur = 0, dest = -1; cur < nums.size(); cur++)
		{
			if (nums[cur] != 0)
				swap(nums[++dest], nums[cur]);
		}
	}
};